const AccessTokenKey = 'ACCESS_TOKEN'
const RefreshTokenKey = 'REFRESH_TOKEN'
const UserIdKey = 'USER_ID'
const ExpiresTimeKey = 'EXPIRES_TIME'

// ========== Token 相关 ==========

export function getAccessToken() {
    return uni.getStorageSync(AccessTokenKey)
}

export function getRefreshToken() {
    return uni.getStorageSync(RefreshTokenKey)
}

export function getUserId() {
    return uni.getStorageSync(UserIdKey)
}

export function getExpiresTime() {
    return uni.getStorageSync(ExpiresTimeKey)
}


export function setToken(token) {
    uni.setStorageSync(AccessTokenKey, token.accessToken)
    uni.setStorageSync(RefreshTokenKey, token.refreshToken)
    uni.setStorageSync(UserIdKey, token.userId)
    uni.setStorageSync(ExpiresTimeKey, token.expiresTime)
}

export function removeToken() {
    uni.removeStorageSync(AccessTokenKey)
    uni.removeStorageSync(RefreshTokenKey)
    uni.removeStorageSync(UserIdKey)
    uni.removeStorageSync(ExpiresTimeKey)
}

// 是否需要刷新 Token
export function isRefreshToken() {
    const expiresTime = getExpiresTime()
    if (!expiresTime) {
        return false
    }
    // 如果 < 60 秒，则刷新 Token
    const currentTime = new Date().getTime()
    return (expiresTime - currentTime) / 1000 < 60
}

// ========== 登录重定向相关 ==========

// 保存当前页面路径
export function saveCurrentPath() {
    const pages = getCurrentPages()
    console.debug('pages', pages)
    if (pages.length > 0) {
        const currentPage = pages[pages.length - 1]
        const route = currentPage.route
        const options = currentPage.options
        console.debug('currentPage', currentPage)
        console.debug('route', route)
        console.debug('options', options)
            // 构建完整的路径
        let fullPath = '/' + route
        if (options && Object.keys(options).length > 0) {
            const params = Object.keys(options).map(key => `${key}=${options[key]}`).join('&')
            fullPath += '?' + params
        }

        console.debug('fullPath', fullPath)
        uni.setStorageSync('REDIRECT_PATH', fullPath)
        console.log('保存重定向路径:', fullPath)
    }
}

// 处理登录后的重定向
export function handleLoginRedirect() {
    const redirectPath = uni.getStorageSync('REDIRECT_PATH')
    if (redirectPath) {
        console.log('检测到重定向路径:', redirectPath)
        uni.removeStorageSync('REDIRECT_PATH')

        // 延迟跳转，确保登录流程完成
        setTimeout(() => {
            // 尝试使用 navigateTo
            console.debug('navigateTo', redirectPath)
            uni.navigateTo({
                url: redirectPath,
                success: () => {
                    console.log('重定向成功111:', redirectPath)
                },
                fail: (err) => {
                    console.log('navigateTo 失败，尝试 switchTab:', err)
                        // 如果是 tabBar 页面，使用 switchTab
                    uni.switchTab({
                        url: redirectPath,
                        success: () => {
                            console.log('switchTab 重定向成功:', redirectPath)
                        },
                        fail: (err2) => {
                            console.log('switchTab 也失败，使用 reLaunch:', err2)
                                // 最后尝试 reLaunch
                            uni.reLaunch({
                                url: redirectPath,
                                success: () => {
                                    console.log('reLaunch 重定向成功:', redirectPath)
                                },
                                fail: (err3) => {
                                    console.error('所有重定向方式都失败:', err3)
                                        // 如果都失败了，跳转到首页
                                    uni.switchTab({
                                        url: '/pages/home/index'
                                    })
                                }
                            })
                        }
                    })
                }
            })
        }, 100)

        return true // 表示有重定向
    }
    return false // 表示没有重定向
}

// 跳转到登录页面
export function redirectToLogin() {
    console.debug('redirectToLogin')
        // 保存当前页面路径
    saveCurrentPath()

    // 跳转到登录页面
    uni.reLaunch({
        url: '/pages/login/index',
        success: () => {
            console.log('跳转到登录页面成功')
        },
        fail: (err) => {
            console.error('跳转到登录页面失败:', err)
        }
    })
}

// 检查是否已登录
export function isLoggedIn() {
    const token = getAccessToken()
    return !!token
}